// nst_msg.h
#ifndef NST_MSG_H
#define NST_MSG_H

#include <stdint.h>
#include <stdbool.h>

typedef struct {
    uint8_t *buffer;
    uint16_t head;
    uint16_t tail;
    uint16_t size;
    uint16_t element_size;
} nst_msg_queue_t;

void nst_msg_init(nst_msg_queue_t *queue, uint8_t *buffer, uint16_t size, uint16_t element_size);
bool nst_msg_enqueue(nst_msg_queue_t *queue, const void *msg);
bool nst_msg_dequeue(nst_msg_queue_t *queue, void *msg);
bool nst_msg_is_empty(const nst_msg_queue_t *queue);
bool nst_msg_is_full(const nst_msg_queue_t *queue);

#endif // NST_MSG_H
